package d0914;
import java.io.*;
import java.util.Date;


public class File类 {

    public static void main(String[] args) throws IOException {
        // 绝对路径, 相对路径
        // window 绝对路径  盘符开头  c:/..., d:/...
        //        相对路径  不以盘符开头   a/b.txt
        // linux  绝对路径 / 开头
        // 绝对路径
        File file1 = new File("c:/a.txt");
        // 相对路径
        File file2 = new File("a.txt");

        System.out.println("绝对路径:" + file1.getAbsolutePath());
        System.out.println("绝对路径:" + file2.getAbsolutePath());

        System.out.println("文件存在:" + file1.exists());
        System.out.println("文件存在:" + file2.exists());

        System.out.println("是文件:" + file2.isFile());
        System.out.println("是目录:" + file2.isDirectory());

        // 创建文件
        file2.createNewFile();
        System.out.println("是文件:" + file2.isFile());
        System.out.println("是目录:" + file2.isDirectory());

        // 创建 a目录下的 b 目录
        File file3 = new File("c:/a", "b");
        file3.mkdir();

        File file4 = new File("c:/a/c/e");
        System.out.println("创建单级目录:c:/a/c/e " + file4.mkdir());
        System.out.println("创建多级目录:c:/a/c/e " + file4.mkdirs());

        // 移动文件
        File file5 = new File("c:/a", "b.txt");
        File file6 = new File("c:/a/c/e/b.dat");
        file5.createNewFile();
        file5.renameTo(file6);

        // 删除, 大小, 日期

        System.out.println("=================== 文件查询  ===================");

        System.out.println("==== 查询全部 ===");

        File f1 = new File("C:\\Program Files");
        /**
         *  文件的 list 方法
         *  1. 带参数 : 参数是过滤器
         *  2. 带Files后缀: 返回  文件对象数组, 否则 文件名数组
         */
        String[] filenames = f1.list();
        for (int i = 0; i < filenames.length; i++) {
            System.out.println(filenames[i]);
        }

        System.out.println("==== 条件查询   显示名字+最后修改时间 ===");
        // Filter 过滤器
        FilenameFilter ff = new FilenameFilter() {
            @Override
            /**
             * dir 所在文件夹
             * name 当前的文件名
             */
            public boolean accept(File dir, String name) {
                // 返回值 true 表示保留, false 表示去除
                // 显示 windows 开头的文件
                return name.startsWith("Windows");
            }
        };

        File[] f1s = f1.listFiles(ff);
        for (File f : f1s) {
            Date date = new Date(f.lastModified());
            System.out.println(f.getName() + " \t " + date);
        }

        System.out.println("==== 条件查询   文件大小   5M  过滤 ===");
        File f2 = new File("D:\\_文件柜");

        // FileFilter ff1;

        File[] f2s = f2.listFiles(pathname -> {
            // 判断文件大小是否超过 5M
            boolean ret = pathname.length() > 1024 * 1024 * 5;
            return ret;
        });

        for (File f : f2s) {
            System.out.println(f.getName() + " \t " + f.length() / 1024 / 1024);
        }

        // 查询所有文件名中 包含 s 的文件夹, 显示 名称 + 大小 + 日期

    }
}
